//2831.找出最长等值子数组
//https://leetcode.cn/problems/find-the-longest-equal-subarray
class Solution {
public:
    int longestEqualSubarray(vector<int>& nums, int k) {
        //数字和对应数字出现的下标
        unordered_map<int,vector<int>> hash;
        int n = nums.size();
        int ret = 0;
        for(int i = 0;i<n;++i) hash[nums[i]].push_back(i);
        
        for(auto& [x,y]:hash)
        {
            n = y.size();
            //枚举右端点
            for(int r = 0,l = 0;r<n;++r)
            {
                //首先 l 和 r 代表k数的两个下标 如果两个下标中需要删除的数大于k则缩小范围 即l向r靠近
                //v[r]-v[l]得出的是当前重复元素的个数和其他元素之和 r-l得出当前重复元素的个数
                while(y[r]-y[l]-(r-l) > k) ++l;
                //找到一个符合范围的区间 就更新结果
                ret = max(ret,r-l+1);
            }
        } 
        return ret;
    }
};